interface PaginatedFormatReturn<T> {
  total:number,list:T[]
}
export interface MybatisPageRequest{
    current ?: number; // 当前页
    size?:number; // 每页记录条数
    [key:string]:any;
}

export interface JpaPageRequest{
    page ?: number; // 当前页
    size?:number; // 每页记录条数
    // 排序相关的信息，以property,property(,ASC|DESC)的方式组织，
    // 例如sort=firstname&sort=lastname,desc 表示在按firstname正序排列基础上按lastname倒序排列。
    sort?:string[]; // 排序  sort，
    [key:string]:any;
}
export interface AntdRequestParam{
    current ?: number;
    pageSize ?: number;
    sorter ?: any;
    filters ?: any;
    [key:string]:any;
}

export interface MybatisPageResponse<T>{
    total:number;   // 总共的条数
    size:number; // 每页多少
    current :number;    // 当前页
    pages:string;   // 总共的页数
    records:T[];    // 记录
}

export interface JpaPageResponse<T>{
    total:number;   // 总共的条数
    size:number; // 每页多少
    current :number;    // 当前页
    pages:string;   // 总共的页数
    data:T[];    // 记录
}
// 请求 分页 参数转换，由antd的请求参数 -> mybatis plus 的参数需要，
export function antd2Mp(data:AntdRequestParam):MybatisPageRequest{
    if(!data){
        return {};
    }
    const nw = {...data};
    nw.size = data.pageSize;
    delete nw.pageSize;
    return nw as MybatisPageRequest;
}
// 分页返回 mybatis 到 antd 的转换

export function mp2Antd<T>(data:MybatisPageResponse<T>):PaginatedFormatReturn<T>{
    if(!data){
        return {list:[],total:0};
    }
    const {total, records} = data;
    return {total,list:records} ;
}


// 请求 分页 参数转换，由antd的请求参数 -> mybatis plus 的参数需要，
export function antd2Jpa(data:AntdRequestParam):JpaPageRequest{
    if(!data){
        return {};
    }
    const nw :JpaPageRequest = {...data};
    nw.size = data.pageSize || 20;
    if(nw.size<0){
        nw.size=20;
    }
    nw.page = (data.current||1)-1;
    if(nw.page<0){
        nw.page=1;
    }
    delete nw.pageSize;
    return nw ;
}
// 分页返回 mybatis 到 antd 的转换

export function jpa2Antd<T>(data:JpaPageResponse<T>):PaginatedFormatReturn<T>{
    if(!data ){
        return {list:[],total:0};
    }
    const {total} = data;
    const records = data.data;
    return {total,list:records} ;
}
